#' Style significant figure-like rounding
#'
#' Converts a numeric argument into a string that has been rounded to a
#' significant figure-like number. Scientific notation output
#' is avoided, however, and additional significant figures may be displayed for
#' large numbers.  For example, if the number of significant digits
#' requested is 2, 123 will be displayed (rather than 120 or 1.2x10^2).
#'
#' If 2 sig figs are input, the number is rounded to 2 decimal places
#' when `abs(x) < 1`, 1 decimal place when `abs(x) >= 1 & abs(x) < 10`,
#' and to the nearest integer when `abs(x) >= 10`.
#'
#' @param x Numeric vector
#' @param digits Integer specifying the minimum number of significant
#' digits to display
#' @inheritParams style_number
#' @export
#' @return A character vector of styled numbers
#' @family style tools
#' @author Daniel D. Sjoberg
#' @examples
#' c(0.123, 0.9, 1.1234, 12.345, -0.123, -0.9, -1.1234, -132.345, NA, -0.001) %>%
#'   style_sigfig()
style_sigfig <- function(x, digits = 2, big.mark = NULL, decimal.mark = NULL, ...) {
  # calculating the number of digits to round number
  d <- paste0("round(abs(x), digits = ", digits - digits:1 + 1, ") < 10^",
    digits - digits:1, " ~ ", digits:1,
    collapse = ", "
  ) %>%
    {
      paste0("case_when(", ., ", TRUE ~ 0)")
    } %>%
    # converting strings into expressions to run
    parse(text = .) %>%
    eval()

  # formatting number
  style_number(x, digits = d, big.mark = big.mark, decimal.mark = decimal.mark, ...)
}
